package main

// 这个 import 语法引入了 encoding/base64 包，并使用别名 b64 代替默认的 base64。这样可以节省点空间。
import b64 "encoding/base64"
import "fmt"

// Go 同时支持标准的和 URL 兼容的 base64 格式。编码需要使用 []byte 类型的参数，所以要将字符串转成此类型。
func main() {

	data := "abc123!?$*&()'-=@~"
	// 使用 标准的 base64 格式进行编解码
	sEnc := b64.StdEncoding.EncodeToString([]byte(data))
	fmt.Println(sEnc) // YWJjMTIzIT8kKiYoKSctPUB+

	// 解码可能会返回错误，需要进行错误检查
	sDec, err := b64.StdEncoding.DecodeString(sEnc)
	if err != nil {
		panic(err)
	}
	fmt.Println(string(sDec)) // abc123!?$*&()'-=@~
	fmt.Println()

	// 使用 URL 兼容的 base64 格式进行编解码
	uEnc := b64.URLEncoding.EncodeToString([]byte(data))
	fmt.Println(uEnc) // YWJjMTIzIT8kKiYoKSctPUB-
	uDec, _ := b64.URLEncoding.DecodeString(uEnc)
	fmt.Println(string(uDec)) // abc123!?$*&()'-=@~
}
